package com.itic.appbase.applications.files.upload.service;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import com.itic.appbase.applications.files.persistence.model.Files;
import com.itic.appbase.applications.files.service.FilesService;
import com.itic.appbase.applications.files.utils.FileHelper;
import com.itic.appbase.framework.common.constants.InitConst;
import com.itic.appbase.framework.common.constants.ResponseCode;
import com.itic.appbase.framework.common.service.BaseService;
import com.itic.appbase.framework.utils.IdGen;
import com.itic.appbase.framework.utils.StringHelper;

/**
 * 文件上传接口实现类 Company: ITIC
 * 
 * @author 石俊
 * @date 2015年4月16日 下午5:19:00
 * @version 1.0
 */
@Service("fileUploadService")
public class FileUploadService extends BaseService {
    
    @Autowired
    private FilesService filesService;
    
    public Map<String,Object> uploadFile(List<MultipartFile> availableFile,Files files, boolean dbFlag) {
        Map<String,Object> result = new HashMap<String,Object>();
        result.put("result", ResponseCode.SUCCESS.getCode());//返回文件上传结果
        if (availableFile != null && !availableFile.isEmpty()) {
            String rootDir = FileHelper.getRootDir();// 获取文件根路径
            for (MultipartFile file : availableFile) {
                
                String fileName = file.getOriginalFilename();// 获取文件名称
                String sumDir = "";//文件存储相对路径
                
                sumDir = FileHelper.relativePath(fileName, files.getTableName(), dbFlag);
                
                File localFile = new File(rootDir + sumDir);//获取保存文件的全路径

                if (!localFile.getParentFile().exists()) {//判断父文件夹是否存在
                    localFile.getParentFile().mkdirs();
                }
                try {
                    file.transferTo(localFile); // 将上传文件写到服务器上指定的文件
                    if(dbFlag){//文件信息保存到数据库
                        // 获取文件储存信息
                        Files f = new Files();
                        f.setId(IdGen.uuid());
                        f.setFileName(fileName);// 文件名称
                        f.setFilePath(sumDir);
                        f.setFileSize(FileHelper.modifyByte(String.valueOf(file.getSize())));//文件大小
                        f.setFileSuffix(FilenameUtils.getExtension(fileName));// 文件类型
                        f.setTableName(files.getTableName());//所属业务表
                        if (StringHelper.isNotBlank(files.getId())){
                            f.setBusinessId(files.getId());
                        } else {
                            f.setBusinessId(IdGen.uuid());// 业务表ID
                        }
                        f.setField(files.getField());
                        f.setCreateUser(InitConst.ID);
                        f.setOrgCode(InitConst.ID);
                        filesService.add(f);
                        
                        Map<String,String> dataMap = new HashMap<String,String>();
                        dataMap.put("fileId", f.getId());
                        dataMap.put("buinessId", f.getBusinessId());
                        dataMap.put("filePath", f.getFilePath());
                        result.put("data", dataMap);
                    }
                }catch (IOException e) {
                    LOGGER.error("FileUploadService|uploadFile：文件上传出错", e);
                    result.put("result", ResponseCode.SERVER_ERROR.getCode());//返回文件上传结果
                }
            }
        }
        return result;
    }

    
}
